﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace NicoView.Model.Share.Service
{
    /// <summary>
    /// 正規表現及び文字の置換に使用されるフォーマット文字列群
    /// </summary>
    public static class NicoFormat
    {
        private const string _internal_url_format = @"https?://[-_.!~*'()a-zA-Z0-9;?:\@&=+\$%#/]+";

        /// <summary>
        /// htmlのaタグ
        /// </summary>
        public static string ANCHOR_HTML_TAG 
        {
            get
            {
                return @"<[aA][^h]+href=""(" + _internal_url_format + @")""[^>]*>([^<]+)</[aA]\s*>";
            }
        }


        /// <summary>
        /// 単独の番号アンカー
        /// </summary>
        public static string NOSINGLEANCHOR_FORMAT
        {
            get
            {
                return @">>[0-9]+";
            }
        }
        
        /// <summary>
        /// その他HTMLタグ
        /// </summary>
        public static string HTML_TAG
        {
            get
            {
                return @"<[^>]+>";
            }
        }

        /// <summary>
        /// 複数の番号アンカー
        /// </summary>
        public static string NORANGEANCHOR_FORMAT
        {
            get
            {
                return @">>[0-9]+-[0-9]+";
            }
        }

        /// <summary>
        /// 番号アンカー
        /// </summary>
        public static string NOANCHOR_FORMAT
        {
            get
            {
                return @">>([0-9]+)(-([0-9]+))?";
            }
        }

        /// <summary>
        /// URL
        /// </summary>
        public static string URL_FORMAT
        {
            get
            {
                return _internal_url_format;
            }
        }

        /// <summary>
        /// 改行
        /// </summary>
        public static string LINE_BREAK
        {
            get
            {
                return @"<[bB][rR]\s*>|<[bB][rR]\s*/>|\r\n|\n";
            }
        }

        /// <summary>
        /// 動画番号
        /// </summary>
        public static string VIDEOID_FORMAT
        {
            get
            {
                return @"[sn]m[0-9]+";
            }
        }

        /// <summary>
        /// 生放送番号
        /// </summary>
        public static  string LIVEID_FORMAT
        {
            get
            {
                return @"lv[0-9]+";
            }
        }
        
        /// <summary>
        /// コミュニティ番号
        /// </summary>
        public static  string COMMUNITY_FORMAT
        {
            get
            {
                return @"co[0-9]+";
            }
        }


        /// <summary>
        /// チャンネル番号
        /// </summary>
        public static string CHANNEL_FORMAT
        {
            get
            {
                return @"ch[0-9]+";
            }
        }

        /// <summary>
        /// 名前登録判定
        /// </summary>
        public static string NAME_REGIST_FORMAT
        {
            get
            {
                return @"[@＠]\s*([^@＠<>]+)\s*\z";
            }
        }

        /// <summary>
        /// コメントコマンド
        /// </summary>
        public static string COMMENT_COMMAND_FORMAT
        {
            get
            {
                return @"\A(/[a-z0-9]+)(\s+)(([a-z0-9]+)([\s$]+))*";
            }
        }

        /// <summary>
        /// 放送者用コメント表示コマンド
        /// </summary>
        public static string OWNER_SHOW_COMMAND_FORMAT
        {
            get
            {
                return @"\A((/perm)|(/chukei))(\s+)";
            }
        }


        /// <summary>
        /// BSPコマンド
        /// </summary>
        public static string BSP_COMMAND_FORMAT
        {
            get
            {
                return @"\A(/press)(\s+)(show)(\s+)(?<color>[^\s]+)(\s+)([@＠^]+)(\s+)";
            }
        }

        public static string NONE_SHOW_COMMAND_FORMAT
        {
            get
            {
                return @"\A/(((hb)(\s+)(ifseetno)(\s+)([0-9]+))|(keepalive)|(cls))$";
            }
        }


    }
}
